﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using ModeloMagiPack.Entidades;
using BLLMagiPack.Managers;

namespace MaGiPack
{
    public partial class FrmCategorias : Form
    {
        private Acciones _accion;
        private int _idCategoria;


        public Categoria CategoriaSeleccionada 
        {
            get
            {
                Categoria cat = null;

                if (dgvCategorias.SelectedRows.Count > 0)
                {
                    cat = new Categoria();
                    cat.IdCategoria = (int)dgvCategorias.SelectedRows[0].Cells["IdCategoria"].Value;

                    BLLCategoria bllCategoria = new BLLCategoria();
                    cat = bllCategoria.TraerCategoria(cat.IdCategoria);
                }

                return cat;
            }
        }


        public FrmCategorias()
        {
            InitializeComponent();
            _accion = Acciones.alta;
            Application.ThreadException += new System.Threading.ThreadExceptionEventHandler(Utilidades.Application_ThreadException);
        }

        private void TraerCategoria()
        {
            Categoria seleccionada = CategoriaSeleccionada;

            _idCategoria = seleccionada.IdCategoria;
            txtNombre.Text = seleccionada.Nombre;
        }

        private void TraerCategorias()
        {
            BLLCategoria bllCategoria = new BLLCategoria();

            if(txtBuscar.TextLength == 0)
                dgvCategorias.DataSource = bllCategoria.TraerCategorias().OrderBy(c => c.Nombre).ToList();
            else
                dgvCategorias.DataSource = bllCategoria.TraerCategorias(txtBuscar.Text).OrderBy(c => c.Nombre).ToList();
        }

        private void SeleccionarAccion()
        {
            switch (_accion)
            {
                case Acciones.alta:
                    gbDatosCategoria.Text = "Nueva categoría:";
                    //btnGuardar.Text = "Guardar nuevo";
                    Utilidades.LimpiarControles(gbDatosCategoria);
                    break;

                case Acciones.modificacion:
                    gbDatosCategoria.Text = "Modificando categoría:";
                    //btnGuardar.Text = "Guardar";
                    TraerCategoria();
                    break;

                default:
                    break;
            }
        }

        private bool ValidarDatos()
        {
            bool estaOK = true;
            Utilidades.LimpiarErrores(this, errorCategorias);
            estaOK = Utilidades.ValidarDatos(this, errorCategorias);

            return estaOK;
        }


        private void FrmCategorias_Load(object sender, EventArgs e)
        {
            SeleccionarAccion();
            TraerCategorias();
        }

        private void btnGuardar_Click(object sender, EventArgs e)
        {
            try
            {
                if (ValidarDatos())
                {
                    Categoria categoria = new Categoria();
                    categoria.IdCategoria = _idCategoria;
                    categoria.Nombre = txtNombre.Text;

                    BLLCategoria bllCategoria = new BLLCategoria();

                    switch (_accion)
                    {
                        case Acciones.alta:
                            bllCategoria.CargarCategoria(categoria);
                            Utilidades.LimpiarControles(gbDatosCategoria);
                            break;

                        case Acciones.modificacion:
                            bllCategoria.ModificarCategoria(categoria);
                            break;

                        default:
                            break;
                    }

                    MessageBox.Show("¡Su operación se completó con éxito!", "Información", MessageBoxButtons.OK, MessageBoxIcon.Information);
                    TraerCategorias();
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message, "ERROR", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }

        private void btnBuscar_Click(object sender, EventArgs e)
        {
            TraerCategorias();
        }

        private void txtBuscar_KeyUp(object sender, KeyEventArgs e)
        {
            if (e.KeyData == Keys.Enter)
                TraerCategorias();
        }

        private void dgvCategorias_SelectionChanged(object sender, EventArgs e)
        {
            btnEditar.Enabled = btnRemover.Enabled = dgvCategorias.SelectedRows.Count > 0;
        }

        private void btnAgregar_Click(object sender, EventArgs e)
        {
            _accion = Acciones.alta;
            SeleccionarAccion();
        }

        private void btnRemover_Click(object sender, EventArgs e)
        {
            Categoria seleccionada = CategoriaSeleccionada;

            if (dgvCategorias.SelectedRows.Count > 0)
            {
                if (MessageBox.Show(string.Format("¿Eliminar categoría {0}?", seleccionada.Nombre), "Pregunta", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes)
                {
                    BLLCategoria bllCategoria = new BLLCategoria();
                    bllCategoria.EliminarCategoria(seleccionada);

                    _accion = Acciones.alta;
                    SeleccionarAccion();
                    TraerCategorias();
                }
            }
        }

        private void btnEditar_Click(object sender, EventArgs e)
        {
            if (dgvCategorias.SelectedRows.Count > 0)
            {
                _accion = Acciones.modificacion;
                SeleccionarAccion();
            }
        }
    }
}
